//导入路由
import router from "@/router/index";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
import { fnAddDynamicMenuRoutes } from "@/utils/getAsyncRouter";
import defaultSetting from "./setting";

NProgress.configure({
  easing: "ease", // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: false, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3, // 初始化时的最小百分比
});

// 定义一个白名单
const WHITE_LIST = ["/login", "/notFound"];

let isToken = true;
//导航守卫判断是否需要token才能登录的页面
router.beforeEach((to, from, next) => {
  // 用于设置 浏览器的 title 显示
  if (to.name) {
    document.title = `${to.name}-${defaultSetting.title}`;
  } else {
    document.title = `${defaultSetting.title}`;
  }
  if (isToken && sessionStorage.getItem("membe_token")) {
    // 3.0 存在
    const menuList = JSON.parse(sessionStorage.getItem("membe_token"));
    // console.log(menuList);
    const routes = fnAddDynamicMenuRoutes(menuList.menu);
    routes.forEach((item) => {
      if (item.children && item.children.length > 0) {
        item["redirect"] = item.children[0].path;
        item.children.forEach((item) => {
          if (item.children.length > 0) {
            item["redirect"] = item.children[0].path;
          }
        });
      }
      router.addRoute("layout", item);
    });
    isToken = false; //将isToken赋为 false ，否则会一直循环，崩溃

    next({
      path: to.path, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次)
      replace: true, // 重进一次, 不保留重复历史
    });
  }
  NProgress.start();
  const token = sessionStorage.getItem("membe_token");
  if (token) {
    //  3.1 判断当前访问的页面是否是 login
    if (to.path === "/login") {
      // 是：跳转到首页
      router.push("/home");
    } else {
      // 不是：向后执行
      next();
    }
  } else {
    const bool = WHITE_LIST.includes(to.path);
    if (bool) {
      next();
    } else {
      router.push("/login");
      NProgress.done();
    }
  }
});
router.afterEach(() => {
  NProgress.done();
});
